// src/stores/user.js
import { defineStore } from 'pinia'
import request from '../api/request' // 导入 axios 实例

export const useUserStore = defineStore('user', {
  state: () => ({
    // 1. 添加 token 状态
    token: null,
    userInfo: null, // 初始时 userInfo 设为 null，表示未加载
  }),

  getters: {
    // 2. 改造 getters，以 token 和 userInfo 是否存在为准
    isLoggedIn: (state) => !!state.token && !!state.userInfo,
    username: (state) => state.userInfo?.username || '游客', // 使用可选链 ?. 避免报错
    avatar: (state) => state.userInfo?.avatar || 'https://api.dicebear.com/7.x/avataaars/svg?seed=User'
  },

  actions: {
    // 3. 创建一个完整的登录 Action
    async loginAction(loginData) {
      // a. 调用登录接口
      const result = await request({
        url: '/api/users/login',
        method: 'post',
        data: loginData
      });

      if (!result.token) {
        throw new Error('登录失败，未收到Token');
      }

      // b. 成功后，将 token 存入 state
      this.token = result.token;

      // c. 立即调用接口获取用户信息
      await this.fetchUserInfo();
    },

    // 4. 创建获取用户信息的 Action
    async fetchUserInfo() {
      if (!this.token) return; // 如果没有 token，不执行
      try {
        const userInfoResult = await request({
          url: '/api/users/profile',
          method: 'get'
        });
        // 将获取到的用户信息存入 state
        this.userInfo = userInfoResult;  // 假设后端返回 { code, msg, data: { userInfo } }
      } catch (error) {
        console.error('获取用户信息失败', error);
        // 获取失败时，清空登录状态，避免数据不一致
        this.logoutAction();
      }
    },

    // 5. 创建一个登出 Action
    logoutAction() {
      this.token = null;
      this.userInfo = null;
      // pinia-plugin-persistedstate 会自动清理持久化数据
    },

    // (可选) 如果其他地方需要单独设置 token (比如从localStorage初始化)
    setToken(token) {
      this.token = token;
    }
  },

  // 启用持久化，只会持久化 state 中的数据
  // persist: true // 关闭持久化，关闭浏览器后需要重新登录
  persist: {
    storage: sessionStorage, // 使用 sessionStorage 代替 localStorage，关闭浏览器标签页后数据清空
  }
})